package com.simp.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.simp.dto.SysConfigDto;
import com.simp.entity.SysConfigEntity;
import com.simp.entity.SysThemeEntity;
import com.simp.expection.GlobalException;
import com.simp.mapper.SysConfigMapper;
import com.simp.page.PageVO;
import com.simp.page.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

/**
 * @author pan.shun
 * @since 2022/3/16 15:38
 */
@Slf4j
@Service
public class SysConfigService extends ServiceImpl<SysConfigMapper, SysConfigEntity> {

    /**
     * 分页查询
     */
    public PageVO<SysConfigEntity> getPageList(SysConfigDto sysConfigDto) {
        LambdaQueryWrapper<SysConfigEntity> queryWrapper = new LambdaQueryWrapper<>();
        if (!StringUtils.isEmpty(sysConfigDto.getConfigKey())) {
            queryWrapper.like(SysConfigEntity::getConfigKey, sysConfigDto.getConfigKey());
        }
        if (!StringUtils.isEmpty(sysConfigDto.getConfigValue())) {
            queryWrapper.like(SysConfigEntity::getConfigValue, sysConfigDto.getConfigValue());
        }
        Page<SysConfigEntity> iPage = this.page(new Page<>(sysConfigDto.getCurrent(), sysConfigDto.getSize()), queryWrapper);
        return new PageVO<>(iPage);
    }

    private void doCheck(SysConfigEntity sysConfigEntity) {
        LambdaQueryWrapper<SysConfigEntity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysConfigEntity::getConfigKey, sysConfigEntity.getConfigKey());
        if (!StringUtils.isEmpty(sysConfigEntity.getId())) {
            queryWrapper.ne(SysConfigEntity::getId, sysConfigEntity.getId());
        }
        int count = this.count(queryWrapper);
        if (count != 0) {
            throw new GlobalException("参数键值不能重复");

        }
    }

    /**
     * 新增或修改
     */
    public R addOrUpdateConfig(SysConfigEntity sysConfigEntity) {
        doCheck(sysConfigEntity);

        if (StringUtils.isEmpty(sysConfigEntity.getId())) {
            this.save(sysConfigEntity);
        } else {
            this.updateById(sysConfigEntity);
        }
        return R.success();
    }

    /**
     * 删除
     */
    public R removeById(String ids) {
        List<String> idList = Arrays.asList(ids.split(","));
        removeByIds(idList);
        return R.success();
    }

    /**
     * 通过KEY获取Value
     */
    public R getConfigByKey(String key) {
        LambdaQueryWrapper<SysConfigEntity> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysConfigEntity::getConfigKey, key);
        SysConfigEntity configEntity = this.getOne(queryWrapper);
        if (null == configEntity) {
            throw new GlobalException("当前参数键值不存在");
        } else {
            return R.success(configEntity);
        }
    }
}
